package com.jfm.jfmm.utils;


import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.setting.yaml.YamlUtil;
import com.jfm.jfmm.collector.entity.device.Device;

import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;

/**
 * @author DYang
 * @since 2024-10-14 22:20
 *
 * resource 目录操作工具
 */
public class ResourceUtil {

    /**
     * 获取resource目录指定文件下所有的文件
     * @param dir 目录
     */
    public static List<Path> getAllFileInDir(String dir){
        List<Path> pathList = null;
        try {
            // 获取指定目录
            URL resource = ResourceUtil.class.getResource("/" + dir);
            if (resource == null) return null;
            Path deviceDirPath = Paths.get(resource.toURI());
            // 获取目录下的所有文件
            pathList = Files.walk(deviceDirPath)
                    .filter(Files::isRegularFile)
                    .filter(path -> path.toString().endsWith(".yml"))
                    .toList();

            pathList.forEach(System.out::println);
        } catch (URISyntaxException | IOException e) {
            throw new RuntimeException(e);
        }
        return pathList;
    }

    /**
     * 获取resource目录指定文件下所有的文件
     * @param dir
     * @param suffix
     * @return
     */
    public static List<Path> getAllFileInDir(String dir,String suffix){
        List<Path> pathList = getAllFileInDir(dir);
        if (Objects.isNull(pathList)) return null;
        return pathList.stream().filter(path -> path.toString().endsWith(suffix)).toList();
    }

    /**
     * 将yml文件转换为JSON
     * @param pathList
     * @return
     */
    public static List<Dict> ymlToJSON(List<Path> pathList) {
        if (Objects.isNull(pathList)) return null;
        return pathList.stream()
                .map(path -> YamlUtil.loadByPath(path.toUri().toString()))
                .toList();
    }

    /**
     * 将yml文件转换为JSON
     * @param pathList
     * @return
     */
    public static Map<String, Dict> ymlToJSONMap(List<Path> pathList) {
        if (Objects.isNull(pathList)) return null;
        Map<String, Dict> map = new HashMap<>();
        for (Path path : pathList) {
            Path fileName = path.getFileName();
            String name = fileName.toString();
            Dict dict = YamlUtil.loadByPath(path.toUri().toString());
            map.put(name, dict);
        }
        return map;
    }
}
